`timescale 1ns / 1ps
/////////////////////////////////////////////////////////////////////////////
////                                                                     ////
//// Instituto Tecnologico de Costa Rica                                 ////
////                                                                     ////
//// Modulo Lectura                                                      ////
////                                                                     ////
//// Este archivo es parte del proyecto: Comprobador sencillo de memoria ////
//// http://repositorio-charmander.googlecode.com/svn/trunk/             ////
////                                                                     ////
//// Descripcion                                                         ////
//// Implementacion de un sencillo comprobador de memoria como proyecto  ////
//// del curso de Taller de Disenyo Logico.                              ////
////                                                                     ////
//// Funcionamiento:                                                     ////
//// - Se encarga de hacer la lectura en la memoria, e indicar si la     ////
////   escritura fue correcta.                                           ////
////                                                                     ////                                    
//// Autores:                                                            ////
//// - Gia Chen, kathya0812@gmail.com                                    ////
////   Edgar Rojas, edtec217@gmail.com                                   ////
////                                                                     ////
/////////////////////////////////////////////////////////////////////////////
module lectura(_clk_seg_i, Input_Parameter_i, lea_i, value_leer_i, termino_leer_o, fail_o,direccion_o);
	
	//ENTRADAS
	 input _clk_seg_i; //Clock de 1 Hz
	 input [3:0] Input_Parameter_i;
	 input lea_i;
	 input [7:0] value_leer_i;
		 
	 //SALIDAS
	 output reg termino_leer_o;
	 output reg fail_o;
	 reg [3:0] direccion_o = 0;
	 //QUEDE AJUSTANDO LA VARIABLE DE SALIDA QUE TENDRA LA RAM COMO ENTRADA PARA EL ADDRESS
	 reg [3:0] address = 0;
	 reg [7:0] value = 0;
	 reg inicio;
	 
	 always @(posedge _clk_seg_i)  //Cada vez que el clock pase a flanco positivo
	 begin
			if (inicio)
				begin
					//$display("inicie");	
					address =0;
					termino_leer_o = 0;
					inicio = 0;
				end
			else if (lea_i)
				begin
					if (address <= 15)
					begin
						if (Input_Parameter_i == 4'b0001)
						begin
							value = 8'b00001111;
							if (value==value_leer_i) fail_o =0 ;
							else fail_o =1;
						end
						else if (Input_Parameter_i == 4'b0010)
						begin 
							value = 8'b00001010;
							if (value==value_leer_i) fail_o =0 ;
							else fail_o =1;
						end
						else if (Input_Parameter_i == 4'b0100) 
						begin
							value = 8'b00000101;
							if (value==value_leer_i) fail_o =0 ;
							else fail_o =1;
						end 
						else if (Input_Parameter_i == 4'b1000) 
						begin
							value = address;
							if (value==value_leer_i) fail_o =0 ;
							else fail_o =1;
						end 
						else 
							begin
								value = 8'b00000000;
								if (value==value_leer_i) fail_o =0 ;
								else fail_o =1;
							end
						address = address + 1;
						$display("Address es: %d", address);
						if (address == 15)
						begin
							$display("Termino de leer");
							termino_leer_o=1;
							inicio=1;
						end
					end//end del else if lea_i
				end//if inicio 
			else
				begin
					inicio=1;
				end
		end//end del always



endmodule
